//
//  HMStatusListViewModel.swift
//  GuoGuo
//
//  Created by 艾小新 on 16/8/8.
//  Copyright © 2016年 xiaoxin. All rights reserved.
//  为微博主页提供数据 发送网络请求的
//  HMHomeTableViewController -->  HMStatusListViewModel -->  HMStatus

import UIKit
import SDWebImage

class HMStatusListViewModel: NSObject {
    
    // 视图模型
    var hmstatModel : [HMCellViewModel]?
    
    
    // 加载数据
    func loadRequest(isPullUp: Bool,callBack:((isFinished: Bool)->())) {
        
        // 参数
        let url = "https://api.weibo.com/2/statuses/friends_timeline.json"
        
        
        var maxId: Int64 = 0
        var sinceId: Int64 = 0
        // 如果是上拉加载,才去设置maxId
        if isPullUp {
            maxId = hmstatModel?.last?.status?.id ?? 0
            
            if maxId != 0 {
                maxId--
            }
        } else {
            sinceId = hmstatModel?.first?.status?.id ?? 0
            
        }
        

        
        let parameters = ["access_token" : HMUserLoginViewModel.sharedUserLoginViewModel.account!.access_token!,
                          "max_id": "\(maxId)",
                          "since_id": "\(sinceId)"]
        
        
        // 请求
        HMNetworkTools.sharedTools.requestData(.GET, urlString: url, parameter: parameters) { (returnData, errors) in
            if errors != nil {
                callBack(isFinished:false)
                return
            }
            // 这里面其实就拿到数据了
            let dict = returnData!["statuses"] as? [[String:AnyObject]]
            
            var tempArray = [HMCellViewModel]()
            
            for d in dict! {
                
                let c = HMStatus(dict: d)

                tempArray.append(HMCellViewModel(status: c))
            }
            
            // 判断如果 statusArray 为nil,是代表是第一次加载,初始化该数据
            if self.hmstatModel == nil {
                self.hmstatModel = [HMCellViewModel]()
            }
            
            if isPullUp {
                self.hmstatModel! += tempArray
            }else {
                
                self.hmstatModel! = tempArray + self.hmstatModel!
            }   
            // 通知控制器更新UI
            // 这时候先 下载全部 单个图片 到缓存
            
            self.downLoadSignalImage(tempArray, callBack: callBack)

        }
        
        
        
    }
    
    
    // 下载图片到缓存
    private func downLoadSignalImage(temp:[HMCellViewModel],callBack:((isFinished: Bool)->())) {
        
        // 循环temp,依次判断
        
        let group = dispatch_group_create()
        
        
        for viewModel in temp {
            
            var urls = viewModel.status?.pic_urls
            // 判断如果地址为nil 或者 urls的count 为0,那么就直接设置取转发微博配图
            if urls == nil || urls!.count == 0 {
                urls = viewModel.status?.retweeted_status?.pic_urls
            }
            
             // 判断 urls 是否只有一张图片,如果只有一张图片,就去下载图片
            if urls?.count == 1 {
                
                guard let urlString = urls?.first?.thumbnail_pic else {
                    continue
                }
                
                // 做入组操作
                dispatch_group_enter(group)
                // 下载图片
                SDWebImageManager.sharedManager().downloadImageWithURL(NSURL(string:urlString), options: [], progress: nil, completed: { (img, _, _, isFinished, url) in
                    print("下载保存单独一张图片完成,地址是:\(url.absoluteString)")
                    // 下载完成或者下载失败
                    dispatch_group_leave(group)

                })
            
            
            }

        }
        
        
        callBack(isFinished: true)
        
        
    }
    


}
